

//继承权限与访问权限(不同继承权限下各访问权限在子类中的体现)
#ifdef a
//1.public继承权限下
#include<iostream>
using namespace std;
//
class Base {
public:
	int _pub;
protected:
	int _pro;
private:
	int _pri;
};

//public继承权限下的子类
class child : public Base
{
	void Set(int pub, int pro, int pri) {
		_pub = pub;
		//public权限
		//类外可访问
		
		_pro = pro;
		//protected权限
		//证明：_pro在类外无法被访问，继承权限此时是protected或private，而基类中protected权限
		//可以在子类中访问，我们可以再写一个子类，查看_pro是否可以在此子类中访问，结果发现可以访问
		//因此这里的_pro是protected访问权限


		//pri = _pri;
		// -->基类的private权限无法在派生类中访问，更不可能在类外访问
//继承家产后，依然不知道所继承的父亲的私房钱在哪，不可见，不可使用
	}

};

/*
class LittleChlid : public child
{
	void LittleSet() {
		_pro = 2;//可访问，基类为保护类
	}
};
*/

//protected继承权限下的子类
class child1 : protected Base
{
	void Set(int pub, int pro, int pri) {
		_pub = pub;//protected
		_pro = pro;//protected
		//protected权限
		//证明：_pro在类外无法被访问，继承权限此时是protected或private，而基类中protected权限
		//可以在子类中访问，我们可以再写一个子类，查看_pro是否可以在此子类中访问，结果发现可以访问
		//因此这里的_pro是protected访问权限

		//pri = _pri;
		// -->基类的private权限无法在派生类中访问，更不可能在类外访问
//继承家产后，依然不知道所继承的父亲的私房钱在哪，不可见，不可使用
	}

};

/*
class LittleChlid : public child1
{
	void LittleSet() {
		_pub = 1; //可访问，基类为保护类
		_pro = 2;//可访问，基类为保护类
	}
};

*/

//private继承权限下的子类
class child2 : private Base
{
	void Set(int pub, int pro, int pri) {
		_pub = pub;//private
		_pro = pro;//private
		//其子类LittleChild中也无法访问
		
		//pri = _pri;
		// -->基类的private权限无法在派生类中访问，更不可能在类外访问
//继承家产后，依然不知道所继承的父亲的私房钱在哪，不可见，不可使用
	}

};

/*
class LittleChlid : public child2
{
	void LittleSet() {
		_pub = 1; //可访问，基类为保护类
		_pro = 2;//可访问，基类为保护类
	}
};

*/

int main() {
	
	//public::
	child d;
	d._pub = 1;
	//d._pro = 2;->protectd 权限
	//d._pri;--》不可访问
	
	//protected::
	child1 d1;
	//d1._pub = 1;//子类中protected
	//d1._pro = 2;//子类中proteced
	//d1._pri = 3;//不可访问

	//private::
	child2 d2;
	//d2._pub = 1;
	//d2._pro = 2;
	//d2._pri = 3;
	return 0;
}
#endif
#include<iostream>
using namespace std;
int main() {
	cout << sizeof("") << endl;
	//包含'\0',实际是1个字节
	return 0;
}